home *** CD-ROM | disk | FTP | other *** search
/ Hráč 2005 January / Hrac_76_2005-01_dvd.iso / lokalizacie / Medal Of Honor Allied Assault / mohaa10cz.exe / {app} / main / Pak10.pk3 / Global / obj_dm.scr < prev    next >
Text File  |  2002-03-23  |  7KB  |  255 lines

  1. //
  2. //
  3. //    LOGIC FOR OBJECTIVE BASED DEATHMATCH ENTITIES
  4. //
  5. //
  6.  
  7. //***********************************************
  8. // initialization thread... 
  9. //***********************************************
  10.  
  11. bomb_thinker:
  12. // Steve says planting time = 6 seconds
  13. // defusing time = 12 second
  14. // tick time = 36 seconds
  15.     level.bomb_set = 0
  16.  
  17.     level.bomb_defuse_time = 60 //tenths of a second
  18.     level.bomb_set_time = 50  //tenths of a second
  19.     level.bomb_tick_time = 45  //seconds (was 60 seconds, then 30 seconds)
  20. //    level.wait_after_explode = 2  //seconds time after target is destroyed before the level ends (no longer used, done in code now)
  21.     level.bomb_explosion_radius = 1054  //quake units
  22.     level.bomb_use_distance = 128 //quake units
  23.     level.bomb_damage = 200
  24.     level.bombusefov = 30
  25.  
  26.     level.subtitleX = 100
  27.     level.subtitleY = 50
  28.  
  29.     println "----------------------Z-----------------------"
  30.     println "self = " self
  31.     println "self.target (flak 88 or other) = " self.target
  32.     println "self.target.destroyed_model = " self.target.destroyed_model
  33.     println "self.target.target (collision entity) = " self.target.target
  34.     println "self.trigger_name = " self.trigger_name
  35.     println "self.exploder_set = " self.exploder_set
  36.     println "self.explosion_fx = " self.explosion_fx
  37.     println "self.explosion_sound = " self.explosion_sound
  38.     println "self.killarea = " self.killarea
  39.     println "----------------------Z-----------------------"
  40.     
  41.     self.target.collisionent = self.target.target
  42.     self.target notsolid
  43.     thread bomb_waittill_set
  44. end
  45.  
  46. //***********************************************
  47. // first thread... controls allies using the trigger
  48. //***********************************************
  49.  
  50.  
  51. bomb_waittill_set:
  52.  
  53. self model items/pulse_explosive.tik
  54.  
  55. while ( $(self.trigger_name) )
  56. {
  57. println "waittill trigger " self.trigger_name 
  58. self.trigger_name waittill trigger
  59.  
  60.     local.player = parm.other
  61.     //"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
  62.         if (local.player.dmteam != level.planting_team) 
  63.     {
  64.         goto bomb_waittill_set
  65.         println "failed dmteam check" local.player.dmteam    
  66.     }
  67.  
  68.     
  69.     
  70.     local.counter = 0
  71.     while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
  72.     {
  73.         if (local.counter == 0)
  74.             local.player stopwatch (level.bomb_set_time * .1)
  75.             
  76.         local.counter++
  77.     //    if ((local.counter % 5) == 0)
  78.     //        locprint level.subtitleX level.subtitleY("set "+ local.counter)
  79.  
  80.         wait .1
  81.         if (local.counter >= level.bomb_set_time)
  82.         {
  83.             iprintlnbold "Bomba byla pripevnena!"
  84.             if (level.planting_team == "allies")
  85.                 self playsound dfr_objective_o
  86.             else
  87.                 self playsound den_objective_o
  88.             thread bomb_waittill_defuse
  89.             thread bomb_waittill_explode
  90.             self.live = 1
  91.             level.bomb_set ++
  92.             end
  93.         }
  94.     }
  95.     if (local.counter > 0)
  96.         local.player stopwatch 0
  97.     println "usetrigger but failed check" 
  98.     if ! (self cansee local.player level.bombusefov  level.bomb_use_distance) 
  99.         println "failed cansee check"    
  100.     if ! (local.player.useheld == 1)
  101.         println "failed useheld check" local.player.useheld
  102. }
  103. end
  104.  
  105.  
  106. //***********************************************
  107. // second thread... controls axis using the trigger
  108. //***********************************************
  109. bomb_waittill_defuse:
  110. while ( $(self.trigger_name) )
  111. {
  112. self.trigger_name waittill trigger
  113.  
  114.     local.player = parm.other
  115.     
  116.     //"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
  117.     if (local.player.dmteam != level.defusing_team)
  118.     {      
  119.         println "failed dmteam check" local.player.dmteam
  120.         goto bomb_waittill_defuse
  121.     }
  122.     
  123.     
  124.     local.counter = 0
  125.     while ( (Isalive local.player) && (local.player cansee self level.bombusefov  level.bomb_use_distance) && (local.player.useheld == 1) )
  126.     {
  127.         if (local.counter == 0)
  128.             local.player stopwatch (level.bomb_defuse_time * .1)
  129.             
  130.         local.counter++
  131.     //    if ((local.counter % 5) == 0)
  132.     //        locprint level.subtitleX level.subtitleY ("defuse "+local.counter)
  133.  
  134.         wait .1
  135.         if (local.counter >= level.bomb_defuse_time)
  136.         {
  137.             iprintlnbold "Bomba byla deaktivovana!"
  138.             if (level.defusing_team == "allies")
  139.                 self playsound dfr_diffused_d
  140.             else
  141.                 self playsound den_diffused_d
  142.             thread bomb_waittill_set //start first thread again
  143.             self.live = 0
  144.             level.bomb_set --
  145.             end
  146.         }
  147.     }
  148.     if (local.counter > 0)
  149.         local.player stopwatch 0
  150. }
  151. end
  152.  
  153.  
  154. //***********************************************
  155. // third thread... times the bomb and makes it explode at the right time
  156. //***********************************************
  157. bomb_waittill_explode:
  158.     self model items/explosive.tik
  159.     self playsound plantbomb
  160.  
  161.  
  162.     self loopsound bombtick
  163.     
  164.     local.start_time = level.time
  165.     while (level.time < (local.start_time + level.bomb_tick_time) )
  166.     {
  167.         wait .1
  168.         if (self.live != 1)
  169.         {
  170.             self stoploopsound
  171.             end
  172.         }
  173.         if (level.time == (local.start_time + level.bomb_tick_time - 10) )
  174.         {
  175.             self stoploopsound
  176.             self loopsound final_countdown
  177.         }
  178.      }
  179.      self stoploopsound
  180.     thread bomb_explode
  181. end
  182.  
  183.  
  184. //***********************************************
  185. // fourth thread... controls the explosion 
  186. //***********************************************
  187. bomb_explode:
  188.     self.trigger_name remove
  189.  
  190.     thread jitter_large 0
  191.     
  192.     if (self.exploder_set != NIL)
  193.         exec global/exploder.scr::explode self.exploder_set
  194.     
  195.     if (self.explosion_fx != NIL)
  196.     {
  197.         self thread spawn_fx self.explosion_fx
  198.     }
  199.     
  200.     if (self.explosion_sound != NIL)
  201.         self playsound self.explosion_sound
  202.  
  203.     if (self.target != NIL)
  204.     {
  205.         if (self.target.destroyed_model != NIL)
  206.         {
  207.             local.damaged = self.target thread spawn_damaged self.target.destroyed_model
  208.         }
  209.         self.target remove
  210.         waitframe
  211.     }
  212.     radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  213.     if (self.killarea != NIL)
  214.     {
  215.         self.killarea volumedamage 1000
  216.     }
  217.     self hide
  218.     
  219.     self.exploded = 1
  220.  
  221.     // we delay the decrementing of    level.bomb_set so that the script has
  222.     // time to determin the winner before the timelimit gets checked and hit
  223.     wait 0.5
  224.     level.bomb_set -- 
  225. end
  226.  
  227.  
  228. //----------------------------------
  229. spawn_fx local.fx:
  230.     local.temp = spawn script_model model local.fx
  231.     local.temp.origin = self.origin
  232.     local.temp anim start
  233.     wait 5
  234.     local.temp remove
  235. end
  236.  
  237. spawn_damaged local.model:
  238.     local.damaged = spawn script_model model local.model
  239.     local.damaged.origin = self.origin
  240.     local.damaged.angles = self.angles
  241. end local.damaged
  242.  
  243. //******************************
  244. // jitter large effect
  245. // jitter_large [delay]
  246. //******************************
  247. jitter_large local.time:
  248.     if (local.time)
  249.         wait local.time
  250.  
  251.     waitexec global/earthquake.scr .35 10 0 0
  252.     waitexec global/earthquake.scr .23 6 0 0
  253.     waitexec global/earthquake.scr 1 1 0 0
  254.     waitexec global/earthquake.scr 1.25 .3 0 1
  255. end